/*
 * @(#)Domain.java
 */
package jp.ac.kobe_u.cs.cream;

import jp.ac.kobe_u.cs.cream.*;
import java.util.*;

/**
 * Domains.
 * This is an abstract class for domains.
 * A domain ...
 * @see	Variable
 * @since 1.0
 * @version 1.0, 01/31/03
 * @author Naoyuki Tamura (tamura@kobe-u.ac.jp)
 */
public abstract class Domain implements Cloneable {
    protected int size = 0;

    public int size() {
	return size;
    }

    public boolean isEmpty() {
	return size() == 0;
    }

    public abstract Object clone();

    public abstract boolean equals(Domain d);

    public abstract Iterator elements();

    public abstract Object element();

    public abstract boolean contains(Object o);

    public abstract Domain insert(Object o);

    public abstract Domain delete(Object o);

    public abstract Domain cap(Domain d);

    public abstract Domain cup(Domain d);

    public abstract Domain difference(Domain d);

}
